package collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 排序自定义元素的集合
 * @author 范传奇
 *
 */
public class SortListDemo2 {
	public static void main(String[] args) {
		List<Point> list = new ArrayList<>();
		list.add(new Point(3,4));
		list.add(new Point(8,9));
		list.add(new Point(6,5));
		list.add(new Point(7,2));
		list.add(new Point(1,8));
		System.out.println(list);
		/*
		 * 该sort方法要求集合元素必须实现Comparable，否则编译不通过。
		 * 当我们调用某个API时，该API要求我们为其修改其他额外的代码时，这样的操作
		 * 称为侵入性。修改的代码越多，侵入性越强。侵入性不利于系统架构的健康，不利
		 * 与程序的维护，应当尽量避免。
		 * 
		 */
//		Collections.sort(list);
//		Collections.sort(list, new Comparator<Point>() {
//			public int compare(Point o1, Point o2) {
//				int len1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
//				int len2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
//				return len1-len2;
//			}
//		});		
		
		//lambda表达式创建比较器
		Collections.sort(list, (o1,o2)->
			o1.getX()*o1.getX()+o1.getY()*o1.getY()-
			o2.getX()*o2.getX()-o2.getY()*o2.getY()
		);		
		System.out.println(list);
		
	}
}











